package com.situ.staff.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.situ.staff.bean.Project;
import com.situ.staff.bean.Work;
import com.situ.staff.dao.ProjectDao;
import com.situ.staff.dao.WorkDao;
import com.situ.staff.service.ProjectService;

@Service
// @Transactional // 当前所有类开启注解
public class ProjectServiceImpl implements ProjectService {
	@Autowired
	private ProjectDao projectDao;
	@Autowired
	private WorkDao workDao;
	/* private WorkDao workDao = new WorkDaoImpl(); */

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月25日 下午4:24:34
	 * @Title: add
	 * @throws:
	 * @类描述-Description:添加项目
	 */
	@Transactional(readOnly = false, rollbackFor = Exception.class, isolation = Isolation.REPEATABLE_READ)
	public int add(Project project, ArrayList<Integer> staff_ids) throws Exception {
		/*
		 * if (project.getName().length() < 2 || project.getName().length() > 16) {
		 * throw new Exception("项目名字不符合格式"); }
		 */
		// 项目信息保存扫数据库
		int project_id = projectDao.insert(project);
		if (project_id <= 0) {

			throw new Exception("项目保存失败!!!");

		}
		if (staff_ids != null && staff_ids.size() > 0) {
			int batchInsert = workDao.batchInsert(project.getId(), staff_ids);
			if (batchInsert <= 0) {
				throw new Exception("相关人员保存失败!!!");
			}
		}
		return 1;

	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月7日 下午4:24:55
	 * @Title: edit
	 * @throws:
	 * @类描述-Description:修改项目
	 */
	@Override
	public int edit(Project project, Integer[] staff_ids) {

		int result = projectDao.update(project);

		return result;
	}

	/**
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月7日 下午4:25:12
	 * @Title: getAll
	 * @throws:
	 * @类描述-Description:查询所有项目
	 */
	@Override
	public List<Project> getAll() {
		return projectDao.selectAll();
	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月7日 下午4:25:37
	 * @Title: remove
	 * @throws:
	 * @类描述-Description:删除项目
	 */
	@Override
	public int remove(int id) {

		return projectDao.delete(id);
	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月7日 下午4:25:57
	 * @Title: getById
	 * @throws:
	 * @类描述-Description:根据ID查询项目
	 */
	@Override
	public Project getById(int id) {
		return projectDao.selectById(id);
	}

	/**
	 * 
	 * @author: JavaSiegeLoin(Gang)
	 * @创建日期: 2021年9月7日 下午4:26:17
	 * @Title: getStaffByProjectId
	 * @throws:
	 * @类描述-Description:根据项目Id查询员工
	 */
	@Override
	public List<Work> getStaffByProjectId(Integer project_id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PageInfo getForPage(Integer page, Integer limit, Project project) {
		PageHelper.startPage(page, limit);
		List<Project> list = projectDao.select(project);
		PageInfo pageInfo = new PageInfo<>(list);
		return pageInfo;
	}

	@Override
	@Transactional
	public int batchDelete(ArrayList<Integer> ids) {
		projectDao.batchDelete(ids);
		workDao.batchDeleteByProjectIds(ids);
		return 1;
	}

}
